Shell script: *, [], {}, ????, como utilizá-los?

Neste artigo abordarei o uso básico dos wildcards (coringas), que combinados com os comandos de terminal podem fazer mágica. Seu domínio é essencial para todo bom administrador de sistemas Linux.

[ Hits: 31.702 ]

Por: Fabio Maran em 30/01/2009 | Blog: http://movimentolivre.zip.net


*, [], {}, ????



Os wildcards, chamados de coringas ou meta-caracteres, nos auxiliaram em diversas tarefas, então vamos conhecê-los.

Interrogação (?)

Este wildcard tem a finalidade de substituir um ou mais caracteres, porém os mesmos devem existir, senão a busca retornará um valor nulo. Vamos a um exemplo para melhor entendimento.

O exemplo que melhor se encaixa é, eu estou lá em /etc e quero saber os runlevels de meu sistema, simplesmente venho e digito:

# ls -d /etc/rc?.d

Outro exemplo, se eu quisesse listar tudo começado com rc e que tivesse mais três caracteres depois:

# ls -d /etc/rc???

Em minha opinião este é o wildcard menos utilizado, porém se bem implementado em uma busca tem suas vantagens.

Asterisco (*)

Este sim você usa em seu dia-a-dia e às vezes nem se dá conta, sem dúvidas o mais utilizado. O asterisco (*) substitui qualquer quantidade de caracteres e pode ser colocado no começo de uma busca, no meio ou no fim, ou ainda podemos deixar em evidencia apenas a extensão de um arquivo e poder listar tudo que tiver esta extensão em seu nome.

Vamos a um exemplo:

# ls /etc/*.conf

Ou mesmo:

# ls -d /etc/d*.conf

Colchetes []

Este também é muito interessante, ele nos permite adicionar condições especiais para a saída da busca, algo como qualquer texto que termine com um número de 1 a 9 ou todos os diretórios iniciados com letra maiúscula ou minúscula.

Porém no uso do colchetes, tem que haver uma lógica. Vamos a um exemplo.

Quero listar todos os arquivos iniciados de a até c no diretório /etc:

# ls /etc/[a-c]*

Porém não serão listados arquivos que iniciam com letra maiúscula, se eu quisesse listar as maiúsculas ficaria da seguinte maneira:

# ls /etc/[a-cA-C]*

E se eu quisesse listar todos os arquivos exceto os iniciados por vogais, ficaria assim:

# ls /etc/[^AEIOU]*

Estes são exemplos não convencionais, vocês entenderão bem daqui a pouco quando passarmos para a prática.

Fique atento a um coisa, veja que cada colchete substitui apenas um caractere.

Chaves {}

Este wildcard nos permite especificar uma combinação de caracteres, números ou trechos para serem combinados com o que estiver fora dele, assim fica meio confuso né, mas vamos a um exemplo que rapidamente vocês entenderam.

Digamos que eu esteja no diretório corrente e queira listar todos arquivos que iniciem com a palavra text:

# ls -la . {text}*

O que mais chama a atenção neste wildcard é que o mesmo pode ser combinado com comandos de criação de arquivos e diretório, o que não podemos fazer usando o wildcard [], isso facilita e muito quando se tem um padrão no nome do arquivo e só mude algum caractere, muito bom para ministrar aulas ou dar de exemplos em artigos. :)

Veja: eu quero criar dez arquivos iniciados com o nome aula. Vejo e emito o seguinte comando:

# touch aula{1,2,3,4,5,6,7,8,9,10}

Interessante né, agora que já entenderam o que cada wildcard faz, que tal aprofundar-se um pouco mais?

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. *, [], {}, ????
   3. Utilizando os wildcards - modo listagem
   4. Utilizando os Wildcards - realizando movimentações
Outros artigos deste autor

Desvendando os filesystems

Samba: Servidor de impressão e introdução a PDC (Primary Domain Controller)

Virtualização de sistemas

Instalando o KDE 4 no Debian

Samba: Integração com ClamAV e outras coisas úteis

Leitura recomendada

OpenLDAP: Instalando um servidor de diretórios com replicação (SyncRepl)

Zabbix 2.4 no CentOS 6.6

Princípios do APT-GET: Conheça esta fantástica ferramenta do Debian

Apresentando Cinnamon

Linux, porque não?

  
Comentários
[1] Comentário enviado por alfameck em 30/01/2009 - 14:59h

ferramenta interessante.

[2] Comentário enviado por Tulio Hoffimann em 30/01/2009 - 15:10h

acrescentando, os metacaracteres "{}" podem ser usados juntamente com o operador ".." que serve para expandir uma sequencia, por exemplo:

No exemplo em que você ultilizou
$ touch aula{1,2,3,4,5,6,7,8,9,10}

Poderia ser facilmente substituido por
$ touch aula{1..10}

E o mesmo pode ser feito com caracteres não-numéricos..
$ echo {a..z}

[3] Comentário enviado por fulllinux em 30/01/2009 - 15:52h

Taí, maran e mais uma de suas super produções!!! hauauha
Abraço meu brother!!!

[4] Comentário enviado por maran em 30/01/2009 - 15:55h

@fulllinux:
kkkkk que isso meu velho, obrigado pelo coment, abraço meu velho, fica na paz!

[5] Comentário enviado por maran em 30/01/2009 - 16:17h

@tuliohm , Fala meu velho, sim podemos fazer estas e outras coisas algo como:

Criar diretorios mais rapidamente, um exemplo simples, bem básico:

$ mkdir /home/maran/{mp3,fotos,musicas,arquivos}

O que aconteceria, seria criado, todos estes diretorios dentro do {}, sendo subdiretórios de /maran

Ou tambem já povoar um arquivo com inumeras linhas, sendo prático para arquivos de exemplos, ou que você repita muitas vezes algumas palavras como:

$ echo -e "\nTeste "{1..20} > wildcards.txt

Eu criaria 20 linhas contendo desde Teste 1 até Teste 20 , cada um em uma linha.

Porem como digo no inicio do artigo, falarei sobre o básico!
Pois como o artigo indica-se a quem esta começando, acabaria confundindo o pessoal!

Obrigado pela observação!

[6] Comentário enviado por cassimirinho em 30/01/2009 - 16:27h

Gostei de ver, está em meus favoritos úteis.

[7] Comentário enviado por leandrojf em 30/01/2009 - 21:24h

boa maram...falo que ia mandar mais um artigo e mandou mesmo...parabens!!!

[8] Comentário enviado por Teixeira em 30/01/2009 - 22:58h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dese aimportancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois eeees materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[9] Comentário enviado por Teixeira em 30/01/2009 - 22:59h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dessa importancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois eeees materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[10] Comentário enviado por Teixeira em 30/01/2009 - 23:01h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dessa importancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois essa materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[11] Comentário enviado por joao_15 em 01/02/2009 - 13:41h

Muito bom o artigo, foi esclarecedor.
Não sabia por exemplo que dava para se usar o {} para criar vários diretórios que estivessem lá dentro.

Vlw por contribuir e mostrar que os wildcards estão aí para nos ajudar.

[12] Comentário enviado por slackmen em 07/02/2009 - 12:47h

Bom artigo, isso eh uma coisa que muita gente esquece e esquenta a cabeça com coisas simples enquanto poderia usar os coringas...

[13] Comentário enviado por Weverton em 24/02/2009 - 10:55h

Artigo bacana, essas dicas sempre facilitam a vida de nós administradores.

[14] Comentário enviado por leandrojpg em 20/02/2010 - 22:15h

Boa Maran, excelente post eu por exemplo aprendi tudo depois que li seu post.

valeu mesmo, fica na paz irmão. valeu


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts